package com.gitee.wsl.ext.array


val DoubleArray.mode: DoubleArray
    get() {
        if (isEmpty()) {
            return doubleArrayOf()
        }

        val modes = toTypedArray().groupingBy { it }.fold(0) { count, _ -> count + 1 }
        val maxMode = modes.values.maxOrNull() ?: return doubleArrayOf()

        return modes.filter { it.value == maxMode }.keys.toDoubleArray().sortedArray()
    }

val FloatArray.mode: FloatArray
    get() {
        if (isEmpty()) {
            return floatArrayOf()
        }

        val modes = toTypedArray().groupingBy { it }.fold(0) { count, _ -> count + 1 }
        val maxMode = modes.values.maxOrNull() ?: return floatArrayOf()

        return modes.filter { it.value == maxMode }.keys.toFloatArray().sortedArray()
    }

val IntArray.mode: IntArray
    get() {
        if (isEmpty()) {
            return intArrayOf()
        }

        val modes = toTypedArray().groupingBy { it }.fold(0) { count, _ -> count + 1 }
        val maxMode = modes.values.maxOrNull() ?: return intArrayOf()

        return modes.filter { it.value == maxMode }.keys.toIntArray().sortedArray()
    }
